<?php

class AIngresoMercanciaAdministracion {

    public function __construct() {
	}
	public function generarIngreso(EFacade & $facade){
		
		
		$docSB = & $facade->getDocumentRoot();
		$workflow = & $facade->getWorkflow();
		 //$listaPersonal = & $docSB->personalAsignado;
		
		
		$ezpdo_=getManager();
		
		
		        
				$ingresoMercancia=$facade->session->create('DIngresoMercancia');
				
				$ingresoMercancia->asociadoA=$docSB;
				
				
		
		$role=NULL;
		$newEfacade =& EFacade :: initWorkflow($facade->session, $ingresoMercancia, & $role);
    			$transSet = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(),3);//tipo process
    			$trans = $transSet->getTransByName('t1');
    			$usuario=NULL;
    			$newEfacade->fireTrans($trans, $usuario, "Crear",TRUE);
				$ingresoMercancia->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios
				$newEfacade->saveWorkflow();
				$ingresoMercancia->commit();
				$ingresoMercancia->numero = $ordenMantenimiento->getDocumentNumber();
				$ingresoMercancia>commit();
				unset($newEfacade);
//				$facade->session->evictAll('MEdge');
//				$facade->session->evictAll('MTrans');
//				$facade->session->evictAll('MPlace');
		
			
		$docSB->epSetDirty(TRUE);
		 
		$workflowSB = & $facade->getWorkflow();
		$workflowSB->epSetDirty(TRUE);
		//echo "<br>",$workflowOP;
		
		$transSetSB = & EFacade :: getCurrentTransSetAuto($workflowSB, /* MTrans :: $TYPE_AUTO_AGENT */ 2);
		$listaWT= &$workflowSB->getWorkTransList();
//		foreach ($listaWT as & $wt){
//			echo "<br>la wt es: ",$wt;
//			echo "<br>la t es: ",$wt->getTransRef();
//		}
		$transSB = $transSetSB->getTransByName('t4');
//		echo "<br>Termina el transOP",$transOP;
		$facade->fireTrans($transSB,$usuario,'Generar Ingreso Mercancia', TRUE);	
			
		
}

		
		public function culminaSolicitud(EFacade & $facade){
			
			$docRC = & $facade->getDocumentRoot();
			$workflow = & $facade->getWorkflow();
			$ezpdo_=getManager();
			$facade->session->evictAll('DSolicitudCompraIndirecta');
			
			$listaItems=$docRC->listaItems;
		 	$listaEquipos=$docRC->listaEquipos;
		 	
		 	
		 	$queryItems="FROM DSolicitudCompraIndirecta as d WHERE d.listaProductos.contains(lis) and lis.itemSolicitado = ? AND lis.cantidadPendiente >0 order by d.fechaCreacion asc AND d.workflowRef.workPlaceList.contains(wp) AND wp.tokens == 1 AND wp.placeRef.name == 'p4'";
			$queryEquipos="FROM DSolicitudCompraIndirecta as d WHERE d.listaEquipos.contains(lis) and lis.itemSolicitado = ? AND lis.cantidadPendiente >0 order by d.fechaCreacion asc AND d.workflowRef.workPlaceList.contains(wp) AND wp.tokens == 1 AND wp.placeRef.name == 'p4'";
			
			
			$solicitudADisparar=array();
			if($listaItems){
			foreach($listaItems as $l){
				
				$cantidadPendienteReq=$l->cantidadRecibida;
//				$esperanza = $ezpdo_->Create('MEsperanzaItemRequisicion');
//				$esperanza->cantidad=$cantidadPendienteReq;
//				$esperanza->orden=$docRC;
//				$l->producto->tipoProducto->descritoPor->esperanza[]=$esperanza;
//				$esperanza->commit();
				//echo "<hr>esperanza: ",$esperanza;
				//echo "<hr>item: ",$l->itemIngresado->esUnProducto;
				//echo "<br><br>cantidadPendiente al comienzo",$cantidadPendienteReq;
				$solicitud=$ezpdo_->find($queryItems, $l->itemIngresado->esUnProducto);
				//echo "<br><br>cuantas solicitudes: ",count($solicitud);
				
				foreach($solicitud as $p){	
				    $disparo=FALSE;
				    //echo "<hr>",$p;
					foreach($p->listaProductos as $i){
					
						if($i->itemSolicitado->epGetObjectId()==$l->itemIngresado->esUnProducto->epGetObjectId() and $i->cantidadPendiente>0 and $cantidadPendienteReq>0){
							
							if($cantidadPendienteReq>0){
								$cantidadPendienteSolicitud=$i->cantidadPendiente;
								$cantidadPendienteSolicitud2=$i->cantidadPendiente;
								//echo "<br>cantidad solicitada1",$cantidadPendienteSolicitud;
								$cantidadPendienteSolicitud-=$cantidadPendienteReq;
								if($cantidadPendienteSolicitud<0){
									$cantidadPendienteSolicitud=0;
								}
								//echo "<br>cantidad solicitada2",$cantidadPendienteSolicitud;
								$cantidadPendienteReq-=$cantidadPendienteSolicitud2;
								//echo "<br>cantidadRequerida antes",$cantidadPendienteReq;
								if($cantidadPendienteReq<0){
									$cantidadPendienteReq=0;
								}
								//echo "<br>cantidad requerida despues",$cantidadPendienteReq;
								$i->cantidadPendiente=$cantidadPendienteSolicitud;
								$i->commit();
								$disparo=TRUE;
							}	
						
						}
				
					}
					if($disparo==TRUE){
						
						
						$solicitudADisparar[$p->epGetObjectId()]=$p;
						
						
						
					}	
			}
				
				
			
			}
			
			}
		if($listaEquipos){
			foreach($listaEquipos as $l){
				
				$cantidadPendienteReq=$l->cantidadRecibida;
				//echo "<br><br>cantidadPendiente al comienzo",$cantidadPendienteReq;
				$solicitud=$ezpdo_->find($queryEquipos, $l->itemIngresado->esUnEquipo->descritoPor);
				
				
				foreach($solicitud as $p){	
				    $disparo=FALSE;
				    
					foreach($p->listaEquipos as $i){
					
						if($i->itemSolicitado->epGetObjectId()==$l->itemIngresado->esUnEquipo->descritoPor->epGetObjectId() and $i->cantidadPendiente>0 and $cantidadPendienteReq>0){
							
							if($cantidadPendienteReq>0){
								$cantidadPendienteSolicitud=$i->cantidadPendiente;
								$cantidadPendienteSolicitud2=$i->cantidadPendiente;
								//echo "<br>cantidad solicitada1",$cantidadPendienteSolicitud;
								$cantidadPendienteSolicitud-=$cantidadPendienteReq;
								if($cantidadPendienteSolicitud<0){
									$cantidadPendienteSolicitud=0;
								}
								//echo "<br>cantidad solicitada2",$cantidadPendienteSolicitud;
								$cantidadPendienteReq-=$cantidadPendienteSolicitud2;
								//echo "<br>cantidadRequerida antes",$cantidadPendienteReq;
								if($cantidadPendienteReq<0){
									$cantidadPendienteReq=0;
								}
								//echo "<br>cantidad requerida despues",$cantidadPendienteReq;
								$i->cantidadPendiente=$cantidadPendienteSolicitud;
								$i->commit();
								$disparo=TRUE;
							}	
						
						}
				
					}
					if($disparo==TRUE){
						
						
						$solicitudADisparar[$p->epGetObjectId()]=$p;
						
						
						
						
				}	
			}
				
				
			
			}
			
			}
			$solicitudesUnicas=array_unique($solicitudADisparar);
			
			foreach($solicitudesUnicas as$solicitud){
			
				$solicitud->ingresos[]=$docRC;
				$facade->session->refresh($docRC );
				
				$newEfacade = & EFacade :: initWorkflowWithoutRole($facade->session, $solicitud, 3);
				
				$transSetS = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(), /* MTrans :: $TYPE_AUTO_PROCESS */ 3);
				
				$transS = $transSetS->getTransByName('t4');
				
				$usuario=NULL;
				$newEfacade->fireTrans($transS, $usuario, "Informar",TRUE);
				
				$solicitud->epSetDirty(TRUE);
				$newEfacade->saveWorkflow();
				
				$solicitud->commit();
				
				unset($newEfacade);
				unset($newEfacade);
				$facade->session->evictAll('MEdge');
				$facade->session->evictAll('MTrans');
				$facade->session->evictAll('MPlace');
			}
			
			$facade->session->evictAll('MWorkflow');
			$docRC->epSetDirty(TRUE);
		 	
			$workflowRC = & $facade->getWorkflow();
			$workflowRC->epSetDirty(TRUE);
			//echo "<br>",$workflowOP;
			
			$transSetRC = & EFacade :: getCurrentTransSetAuto($workflowRC, /* MTrans :: $TYPE_AUTO_AGENT */ 2);
			$listaWT= &$workflowRC->getWorkTransList();
			
	
			$transRC = $transSetRC->getTransByName('t2');
	//		echo "<br>Termina el transOP",$transOP;
			$facade->fireTrans($transRC,$usuario,'Informar a la solicitud', TRUE);	
			
		
		
}
}
?>